home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / epsilon / liner.py < prev    next >
Text File  |  2009-03-13  |  2KB  |  68 lines

  1. # Copyright 2005 Divmod, Inc.  See LICENSE file for details
  2. # -*- test-case-name: vertex.test.test_juice -*-
  3.  
  4. __metaclass__ = type
  5.  
  6. from twisted.internet.protocol import Protocol
  7.  
  8. class LineReceiver(Protocol):
  9.  
  10.     lineMode = True
  11.     MAX_LINE_LENGTH = 1024 * 1024
  12.     buffer = ''
  13.     delimiter = '\r\n'
  14.  
  15.     def lineReceived(self, line):
  16.         pass
  17.  
  18.     def rawDataReceived(self, data):
  19.         pass
  20.  
  21.     def setLineMode(self, extra=''):
  22.         self.lineMode = True
  23.         if extra:
  24.             self.dataReceived(extra)
  25.  
  26.     def isDisconnecting(self):
  27.         if self.transport is None:
  28.             # XXX This _ought_ to be horribly broken but in fact it is
  29.             # not. TODO: Investigate further.  -glyph
  30.             return False
  31.         if self.transport.disconnecting:
  32.             return True
  33.         return False
  34.  
  35.     def setRawMode(self):
  36.         self.lineMode = False
  37.  
  38.     def dataReceived(self, data):
  39.         buffer = self.buffer
  40.         buffer += data
  41.         delimiter = self.delimiter
  42.         begin = 0
  43.         raw = False
  44.         while self.lineMode:
  45.             end = buffer.find(delimiter, begin)
  46.             if end == -1:
  47.                 break
  48.             line = buffer[begin:end]
  49.             self.lineReceived(line)
  50.             if self.isDisconnecting():
  51.                 self.buffer = ''
  52.                 return
  53.             begin = end + len(delimiter)
  54.         else:
  55.             raw = True
  56.         if begin:
  57.             buffer = buffer[begin:]
  58.         if raw:
  59.             self.buffer = ''
  60.             if self.isDisconnecting():
  61.                 return
  62.             if buffer:
  63.                 self.rawDataReceived(buffer)
  64.         else:
  65.             self.buffer = buffer
  66.  
  67.  
  68.